home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / nethack.lha / nethack-3.1 / util / panic.c < prev    next >
C/C++ Source or Header  |  1993-01-08  |  2KB  |  75 lines

  1. /*    SCCS Id: @(#)panic.c    3.1    93/01/07    */
  2. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  3. /* NetHack may be freely redistributed.  See license for details. */
  4.  
  5. /*
  6.  *    This code was adapted from the code in end.c to run in a standalone
  7.  *    mode for the makedefs / drg code.
  8.  */
  9.  
  10. #define NEED_VARARGS
  11. #include    "config.h"
  12.  
  13. #ifdef MICRO
  14. #undef exit
  15. extern void FDECL(exit, (int));
  16. #endif
  17. #ifdef AZTEC
  18. #define abort() exit()
  19. #endif
  20. #ifdef VMS
  21. extern void NDECL(vms_abort);
  22. #endif
  23.  
  24. /*VARARGS1*/
  25. boolean panicking;
  26. void VDECL(panic, (char *,...));
  27.  
  28. void
  29. panic VA_DECL(char *,str)
  30.     VA_START(str);
  31.     VA_INIT(str, char *);
  32.     if(panicking++)
  33. #ifdef SYSV
  34.         (void)
  35. #endif
  36.         abort();    /* avoid loops - this should never happen*/
  37.  
  38.     (void) fputs(" ERROR:  ", stderr);
  39.     Vfprintf(stderr, str, VA_ARGS);
  40.     (void) fflush(stderr);
  41. #if defined(UNIX) || defined(VMS)
  42. # ifdef SYSV
  43.         (void)
  44. # endif
  45.             abort();    /* generate core dump */
  46. #endif
  47.     VA_END();
  48.     exit(1);        /* redundant */
  49.     return;
  50. }
  51.  
  52. #ifdef ALLOCA_HACK
  53. extern long *alloc();
  54. /*
  55.  * In case bison generated foo_yacc.c tries to use alloca(); if we don't
  56.  * have it then just use malloc() instead.  This may not work on some
  57.  * systems, but they should either use yacc or get a real alloca routine.
  58.  */
  59. long *alloca(cnt)
  60. unsigned cnt;
  61. {
  62.     static long dummy;
  63.     /*
  64.      * Assumption:  result returned by alloca() will never be freed.
  65.      *    alloca(0) may be used as a trigger to release memory; we cant
  66.      *    oblige it, and we don't want to attempt to allocate 0 bytes
  67.      *    or return a NULL pointer, so return pointer to `dummy' rather
  68.      *    than allocating at least one byte.
  69.      */
  70.     return cnt ? alloc(cnt) : &dummy;
  71. }
  72. #endif
  73.  
  74. /*panic.c*/
  75.